//axios基础封装
import axios from 'axios'
// import {useUserStore} from "@/stores/userStore.js";
// import {updateToken} from "@/stores/userStore.js"

// const userStore = useUserStore();

const baseURL = import.meta.env.VITE_BASE_URL


const instance = axios.create({
    baseURL: baseURL,
    // baseURL: "http://127.0.0.1:8080/api/",
    // baseURL: "https://app-second-hand-mobile-phone-mall-231114001936.azurewebsites.net",
    timeout: 5000
})

//拦截器

//axios请求拦截器
instance.interceptors.request.use(config => {
    // 设置token
    config.headers.Authorization = localStorage.getItem("accessToken")
        return config
    }, error => {
        return Promise.reject(error)
    }
)
//axios响应拦截器
// instance.interceptors.response.use(response => {
//         return response
//     }, error => {
//     console.log(error)
//             // 判断是否为未授权错误，且不是正在刷新Token的请求，判断url是否是刷新Token的请求
//             if (error.response.status === 401 && !error.config.url.includes("refresh")) {
//                 // 从localStore获取Refresh Token
//                 let  refreshToken = localStorage.getItem("refreshToken")
//                 if (refreshToken!= null) {
//                     // 刷新token
//                     refreshAccessToken(refreshToken)
//                     // 使用新Token重新发起请求
//                     return instance(error.config);
//                 }else {
//                     alert("登录已过期，请重新登录")
//                     window.location.href = '/login'
//                 }
//             }
//     //         if (error.response.status === 401 &&  ) {  // 判断是否为未授权错误且不是正在刷新Token的请求
//     //             // 从localStore获取Refresh Token
//     //             let  refreshToken = localStorage.getItem("refreshToken")
//     //             if (refreshToken!= null) {
//     //                 // 刷新token
//     //                 refreshAccessToken(refreshToken)
//     //                 // 使用新Token重新发起请求
//     //                 return instance(error.config);
//     //             }else {
//     //                 alert("登录已过期，请重新登录")
//     //                 window.location.href = '/login'
//     //             }
//     //             return Promise.reject(error)
//     //         }
//         return Promise.reject(error)
//     }
// )
instance.interceptors.response.use(response => {
    return response;
}, async error => {
    console.log(error);

    if (error.response.status === 401 && !error.config.url.includes("refresh")) {
        // 从localStorage获取Refresh Token
        let refreshToken = localStorage.getItem("refreshToken");
        console.log(refreshToken)

        if (refreshToken != null) {
            //清除本地token
            localStorage.removeItem("refreshToken");
            localStorage.removeItem("accessToken");
            await refreshAccessToken(refreshToken)
            // 刷新token，并等待其完成
            // let newToken =await refreshAccessToken(refreshToken)
            // console.log("重新发请求得到的token")
            // console.log(newToken)
            // localStorage.setItem("accessToken", newToken.accessToken);
            // localStorage.setItem("refreshToken", newToken.refreshToken);
            // 获取最新accessToken
            // 更新请求头的token为最新AccessToken
            error.config.headers.token = localStorage.getItem('accessToken');
            return instance(error.config);
        } else {
            alert("登录已过期，请重新登录1");
            window.location.href = '/login';
        }
    }

    // 其他错误直接 reject
    // return Promise.reject(error);
});

async function refreshAccessToken(refreshToken) {
    // 在这里执行实际的Refresh Token逻辑
    // 调用后端接口，并将旧的Refresh Token作为参数传递
    let newToken = {
        accessToken: '',
        refreshToken: ''
    }
    console.log(refreshToken)
    await instance({
        url: '/restful-api/refresh',
        method: 'get',
        params: {
            refreshToken
        }
    }).then(res => {
        if (res.data.code === 1) {
            // 将新的Token信息保存到LocalStorage、Cookie或Vuex等状态管理工具中
            localStorage.setItem('accessToken', res.data.map.accessToken)
            localStorage.setItem('refreshToken', res.data.map.refreshToken)
            // newToken.accessToken=res.data.map.accessToken
            // newToken.refreshToken=res.data.map.refreshToken
            console.log("刷新token")
            console.log(newToken)
            console.log(res)
            return newToken
        } else {
            alert("登录已过期，请重新登录2")
            window.location.href = '/login'
        }
        console.log(res)
        // storeToken(res.data)
        return newToken
    }).catch(err => {
        // 如果刷新Token失败，返回登录页
        if (err.response.status === 401) {
            window.location.href = '/login'
            alert("登录已过期，请重新登录3")
        }
        return newToken
    })
}

export default instance